package CONTROLADOR;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Vector;

import javax.swing.table.TableModel;

import MODELO.ModeloCategoria;
import MODELO.ModeloIngrediente;
import MODELO.ModeloProducto;
import VISTA.frmProductos;

public class ControladorProductos implements ActionListener{
	private facadeControladorProductos facade;
	private Vector<ModeloIngrediente> ingredientes;
	private List<ModeloCategoria> categorias;
	
	public static void main(String[] args) {
		new ControladorProductos();
	}
    
    //Implementacion del Patron Estructural Facade
	public ControladorProductos() {
		this.facade = new facadeControladorProductos();
		this.facade.setVisible(true);
		facade.addListener(this);
		cargarTabla();
		cargarCombo();
	}
	
	
	private void cargarTabla() {
		TableModel m = facade.getTblIngredientesTblMODEL();
		int i =0;
		while(i< facade.getTblIngredientesTblROW()){
			m.setValueAt("", i, 0);
			m.setValueAt("", i, 1);
			i++;
		}
		ingredientes = new ModeloIngrediente().listar();
		i =0;
		for (ModeloIngrediente modelo: ingredientes) {
			m.setValueAt(modelo.getCodigo(), i, 0);
			m.setValueAt(modelo.getDescripcion(), i, 1);
			i++;
		}
		
	}
	
	private void cargarCombo() {
		facade.getCmbCategoriaProductoREMOVE();
		categorias = new ModeloCategoria().listar();
		for (ModeloCategoria modelo: categorias) {
			facade.getCmbCategoriaProductoADD(modelo.getDescripcion());
		}
		
	}

	@Override
	public void actionPerformed(ActionEvent evt) {
		if(evt.getActionCommand().equals("Cancelar")){
			facade.limpiar();
		}
		else if(evt.getActionCommand().equals("OK")){
			if(!facade.getTxtCodigoProductoEMPTY() && !facade.getTxtDescripcionProductoEMPTY() && !facade.getTxtPrecioProductoEMPTY())
			if(!facade.contar())
			{
				facade.setCodigo(facade.getTxtCodigoProducto());
				facade.setDescripcion(facade.getTxtDescripcionProducto());
				facade.setStatus("A");
				facade.setPrecio(Double.parseDouble(facade.getTxtPrecioProducto()));
				if(facade.registrar()){
					
					Vector<String> v = new Vector<String>();
					Vector<Double> c = new Vector<Double>();
					Vector<String []> vAux = facade.getInfoTabla();
					for (String[] strings : vAux) {
						v.add(buscarIngrediente(strings[1]).getCodigo());
						c.add(Double.parseDouble(strings[2]));
						
					}
					facade.registrarIngredientes(v, c);
					facade.limpiar();
					facade.mostrarMensaje("Producto registrado");
				}
				else
					facade.mostrarMensaje("Codigo registrado");
			}
			else
				facade.mostrarMensaje("No ha registrado ingredientes");
			else
				facade.mostrarMensaje("Campos vacios");
		}
		else if(evt.getActionCommand().equals("Agregar")){
			if(facade.getTblIngredientesSELECTROW()!=-1){
			String des = (String)facade.getTblIngredientesGETVALUE();
			facade.agregar(buscarIngrediente(des));
			}
			else
				facade.mostrarMensaje("Selecionar un Ingrediente");
			
		}
		else if(evt.getActionCommand().equals("Quitar")){
			facade.quitar();
		
		}
		
		
	}
	
     public ModeloIngrediente buscarIngrediente(String descripicion){
        for (int i = 0; i < ingredientes.size(); i++){
        	if(ingredientes.elementAt(i).getDescripcion().equals(descripicion))
                return ingredientes.elementAt(i);
        }return null;
     }  
	

}
